有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JAVA/J2ee应用程序中的SharePoint2013 rest web服务进行基于SAML令牌的身份验证

我有一个使用SP web服务的java/j2ee web应用程序,但最近SP站点被迁移到2013年,并部署在cloud/office 0365中,因此身份验证被破坏。SP人员建议将身份验证机制更改为基于SAML令牌的身份验证,并使用Microsoft Azure AD。因此,我将我的应用程序加载到Azure中,并收到客户端ID,我可以使用该ID生成安全令牌(使用adal4j java api)。现在,我需要完成以下2个步骤来完成office 0365中的身份验证过程,以访问SP 2013 web服务

  1. 获取访问令牌cookies
  2. 获取请求摘要令牌

但无法找到上述两个步骤的任何基于java的API。参考以下教程,但它与aps/有关。网

http://paulryan.com.au/2014/spo-remote-authentication-rest/

请帮助我提供相同的示例代码库

感谢您的支持


共 (2) 个答案

  1. # 1 楼答案

    根据我的经验,我认为您可以尝试一步一步地直接按照引用的article来使用Apache HttpClient构造请求

    例如,下面的代码使用HttpClient对xml主体执行post请求以获取安全令牌

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost("https://login.microsoftonline.com/extSTS.srf");
    String xmlBody = "...";
    InputStreamEntity reqEntity = new InputStreamEntity(
                        new ByteArrayInputStream(xmlBody.getBytes(), -1, ContentType.APPLICATION_OCTET_STREAM);
                reqEntity.setChunked(true);
    httpPost.addHeader("Accept", "application/json; odata=verbose")
    httpPost.setEntity(reqEntity);
    CloseableHttpResponse response = httpclient.execute(httppost);
    String respXmlBody = EntityUtils.toString(response.getEntity());
    //Parse the respXmlBody and extract the security token
    

    您可以尝试按照上面的代码,通过对url https://yourdomain.sharepoint.com/_forms/default.aspx?wa=wsignin1.0的安全令牌主体执行post请求来获取响应包含访问令牌,并使用代码Header[] hs = response.getHeaders("Set-Cookie");获取Set-Cookie头数组作为访问令牌

    然后使用它们设置两个头Cookie以获取请求摘要令牌,并解析响应体以提取FormDigestValue作为请求摘要令牌